package Docker

import (
	"context"
	"os"
	"strings"
	"github.com/docker/docker/api/types"
	"github.com/docker/docker/client"
	"github.com/docker/docker/api/types/container"
	"fmt"
	"time"
	"bufio"

)

func DockerDleContainer(){
	// 创建Docker客户端
	cli, err := client.NewClientWithOpts(client.FromEnv)
	ctx := context.Background()
	if err != nil {
		panic(err)
	}
	// 检查Docker客户端是否正常运行
	_, err = cli.Ping(context.Background())
	if err != nil {
		fmt.Println(Red,"Docker客户端未运行", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	// 列出所有容器
	containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
	if err != nil {
		panic(err)
	}
	//判断是否有容器，没有则返回
	if len(containers) == 0 {
		//黄色
		fmt.Println(Yellow,"没有容器,请使用命令行运行容器", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	Docker_list_container(true, false)
	var containerName string
    for len(strings.TrimSpace(containerName)) == 0 {
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("请输入要停止的容器名字(CTRL+C中断): ")
        containerName, _ = reader.ReadString('\n')
        containerName = strings.TrimSpace(containerName)

        if len(containerName) == 0 {
            //红色字体
            fmt.Println(Red,"输入错误，请重新输入",Reset)
            time.Sleep(1 * time.Second)
            continue
        }
    }
    //查找容器
    var targetContainer types.Container
    for _, c := range containers {
        if c.Names[0] == "/"+containerName {
            targetContainer = c
            break
        }
    }
    // 如果没有找到匹配的容器，直接退出
    if targetContainer.ID == "" {
        //黄色
		fmt.Println(Yellow,"没有找到匹配的容器",Reset)
        time.Sleep(2 * time.Second)
        return
    }
    // 停止容器
    stopOpts := &container.StopOptions{}
    if err := cli.ContainerStop(ctx, targetContainer.ID, *stopOpts); err != nil {
        panic(err)
    }
    // 输出提示信息
    //检测容器状态
    inspect, err := cli.ContainerInspect(ctx, targetContainer.ID)
    if err != nil {
        panic(err)
    }
    if inspect.State.Running == false {
        fmt.Println("容器已停止")
    } else {
        fmt.Println("容器未停止")
    }
        // 删除容器
    if err := cli.ContainerRemove(ctx, targetContainer.ID, types.ContainerRemoveOptions{}); err != nil {
        //红色字体
		fmt.Println(Red,"容器删除失败",Reset)
	}
	//绿色
	fmt.Println(Green,"容器删除成功",Reset)
	time.Sleep(2 * time.Second)

}